package service

import (
	"cmsapi/src/lib"
	"cmsapi/src/model"

	"github.com/gin-gonic/gin"
)

//保存
func Save(c *gin.Context) {
	//	lib.Check1(c)
	where, _ := lib.Get(c)
	table := c.Param("action")
	//post := c.PostFormMap()
	data := make(map[string]interface{}) //注意该结构接受的内容
	c.BindJSON(&data)
	//	post := lib.Post(c)
	//db.Model(User{}).Create(map[string]interface{}{"Name": "jinzhu", "Location": clause.Expr{SQL: "ST_PointFromText(?)", Vars: []interface{}{"POINT(100 100)"}}}) // INSERT INTO `users` (`name`,`location`) VALUES ("jinzhu",ST_PointFromText("POINT(100 100)" ));
	/*

	 */
	// 开始事务
	tx := lib.Mysql.Begin()

	// 在事务中执行一些 db 操作（从这里开始，您应该使用 'tx' 而不是 'db'）
	//tx.Create(...)
	log := make(map[string]interface{}) //日志
	if where["id"] != nil || where["class_id"] != nil {
		result := tx.Debug().Table(lib.DbInfo.Prefix + table).Where(where).Updates(data)
		//	result.RowsAffected // returns updated records count
		//	result.Error        // returns updating error
		//	fmt.Printf("save-Updates  %s \r\n", result.RowsAffected, result.Error)
		if result.Error != nil { // 遇到错误时回滚事务
			c.Set("code", 925)
			tx.Rollback()
			c.Next()
		}
		log["type"] = "update"
	} else {
		result := tx.Debug().Table(lib.DbInfo.Prefix + table).Create(data)
		//	result.RowsAffected // returns updated records count
		//	result.Error        // returns updating error
		//fmt.Printf("save-Create  %s \r\n", result.RowsAffected, result.Error)
		log["type"] = "create"
		if result.Error != nil { // 遇到错误时回滚事务
			c.Set("code", 924)
			//			fmt.Printf("save-Create  %s \r\n", result.RowsAffected, result.Error)
			tx.Rollback()
			c.Next()
		}
	}

	/*
		//写入日志
		//	log["type"]
		result2 := tx.Debug().Table(lib.DbInfo.Prefix + "log").Create(log)
		if result2.Error != nil { // 遇到错误时回滚事务
			c.Set("code", 929)
			tx.Rollback()
			c.Next()
		}
	*/
	// 否则，提交事务

	log["method"] = "post"
	log["token"] = c.DefaultQuery("token", "")
	_bool := model.LogCreate(c, tx, log)

	if _bool == false { // 遇到错误时回滚事务
		c.Set("code", 929)
		tx.Rollback()
		c.Next()
	}

	//fmt.Printf(" _bool %s %T \r\n", log, _bool)
	//fmt.Printf(" 22222222 %s %T \r\n", log, log)
	c.Set("code", 200)
	tx.Commit()
	c.Next()

	//	fmt.Printf("save-where %s=>%s-- json %s \r\n", where, post, data)
}
